//用Promise封装接口请求类
import { config } from '../config.js'
const tips = {
  1: "抱歉！出错啦！",
  1005: "抱歉，开发者的appkey错误！",
  1006: "抱歉，服务器内部错误！",
  1002: "抱歉，找不到对应资源！",
  3000: "抱歉，该期内容不存在!"
}

class Http {
  //为参数添加{}，利用对象结构赋值，这样外部调用request方法时，参数就可以传递一个对象
  request({url,method='GET',data={}}){
    //返回Promise对象
    return new Promise((resolve,reject)=>{
      //调用异步代码，这里将异步代码另外封装是为了可读性
      this._request(url, resolve, reject, method, data)
    })
  }
   //必填参数必须写在默认参数之前
  _request(url, resolve, reject, method, data) {
    wx.request({
      url: `${config.api_base_url}${url}`,
      method:method,
      data:data,
      header: {
        'content-type': 'application/json',
        'appkey': config.appkey
      },
      success: (res) => {
        const code = res.statusCode.toString()

        //判断状态码以2开头才表示请求成功
        if (code.startsWith('2')) {
          //如果调用方没有传递回到函数就不返回内容
          resolve(res.data)
        } else {
          //这里只调用reject改变Promise状态，不传递数据，数据已有对象处理
          reject()
          const errorcode = res.data.error_code
          this._showError(errorcode)
        }

      },
      fail: (error) => {
        reject()
        this._showError(1)
      }

    })
  }
  //错误处理
  _showError(errcode) {
    //没传入错误状态码就设置默认值
    if (!errcode) {
      errcode = 1
    }
    //判断errcode在tips中定义没
    const tip = tips[errcode]
    wx.showToast({
      title: tip ? tips[errcode] : tips[1] ,
      icon: 'none',
      duration: 2000
    })
  }
}
export { Http }